/**
 * 路由守卫
 */
export default ({ app, redirect }) => {
  app.router.beforeEach((to, from, next) => {
    // 用户存在token信息，但是状态为‘未登录’，恢复登录状态
    if (process.server && app.$cookies.get('token') && !app.store.state.user.status) {
      let userId = app.$cookies.get('userId')
      let username = app.$cookies.get('username')
      let avatar = app.$cookies.get('avatar')
      app.store.commit('user/setUserId', userId)
      app.store.commit('user/setUsername', username)
      if (avatar) {
        app.store.commit('user/setAvatar', avatar)
      }
      app.store.commit('user/setStatus', true)

      next()
    } else {
      next()
    }
  })

  // nuxt 实现路由守卫，访问后台管理页面，用户必须登录，否则直接重定向到404页面
  app.router.afterEach((to, from) => {
    // 访问的是后端管理页面
    if (to.path.startsWith("/admin")) {
      // 判断用户是否登录
      if (!app.store.state.user.status && !app.$cookies.get('token')) {
        // 重定向到404页面
        redirect('/error/404')
      }
      if ("/admin" !== to.path) {
        // 判断用户是否拥有该菜单权限
        let pageMenuList = app.store.state.menu.pageMenuList
        if (pageMenuList && !pageMenuList.some(menu => to.path.includes(menu.path))) {
          // 重定向到404页面
          redirect('/error/404')
        }
      }
      // ‘点击侧边菜单’或者‘后台页面刷新’时，设置最新的侧边菜单选中项
      app.store.commit('menu/setMenuActiveName', to.path)

    }
  })
}

